package com.opcoach.ecf2014.engine.ui.parts; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.LightweightSystem; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.nebula.visualization.widgets.datadefinition.IManualValueChangeListener; import org.eclipse.nebula.visualization.widgets.figures.ScaledSliderFigure; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.osgi.framework.Bundle; import org.osgi.framework.FrameworkUtil; import com.opcoach.ecf2014.engine.core.EngineSimulator; public class EngineControlPart { private static final String IMG_START = "icons/startButton.png"; private static final String IMG_STOP = "icons/stopButton.png"; // private static final String IMG_FUNCTION = "icons/functionButton.png"; @Inject private EngineSimulator engineSimu; @Inject public EngineControlPart() { } @PostConstruct public void postConstruct(Composite parent, final ImageRegistry reg) { parent.setLayout(new GridLayout(1, true)); Canvas canvas = new Canvas(parent, SWT.BORDER); canvas.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final LightweightSystem lws = new LightweightSystem(canvas); // Create Scaled Slider final ScaledSliderFigure slider = new ScaledSliderFigure(); slider.setHorizontal(true); // Init Scaled Slider slider.setRange(-10, 10); // can brake or accelerate from -10 to 10 m/s2 slider.setValue(0); slider.setLoLevel(-5); slider.setLoloLevel(-8); slider.setHiLevel(6); slider.setHihiLevel(8); slider.setThumbColor(ColorConstants.gray); slider.setEffect3D(true); slider.setShowMinorTicks(false); slider.addManualValueChangeListener(new IManualValueChangeListener() { public void manualValueChanged(double newValue) { if (engineSimu != null) engineSimu.accelerate((int) newValue); } }); lws.setContents(slider); // Initialize needed images Bundle b = FrameworkUtil.getBundle(getClass()); reg.put(IMG_START, ImageDescriptor.createFromURL(b.getEntry(IMG_START))); reg.put(IMG_STOP, ImageDescriptor.createFromURL(b.getEntry(IMG_STOP))); // reg.put(IMG_FUNCTION, // ImageDescriptor.createFromURL(b.getEntry(IMG_FUNCTION))); // Create only 1 button for start and stop. Composite buttonComposite = new Composite(parent, SWT.NONE); buttonComposite.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true)); buttonComposite.setLayout(new GridLayout(1, true)); final Label startButton = new Label(buttonComposite, SWT.NONE); startButton.setImage(reg.get(IMG_START)); startButton.addMouseListener(new MouseAdapter() { @Override public void mouseDown(MouseEvent e) { if (engineSimu != null) { if (engineSimu.isStarted()) { engineSimu.stop(); startButton.setImage(reg.get(IMG_START)); } else { engineSimu.start(); startButton.setImage(reg.get(IMG_STOP)); } } } }); } }